package cn.itcast.test;

import lombok.extern.slf4j.Slf4j;

import java.util.Random;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.LockSupport;

/**
 * @Author: LDeng
 * @Date: 2021-06-16 10:36
 */

@Slf4j(topic = "c.ExerciseTransfer")
public class ExerciseTransfer {


    public static void main(String[] args) throws InterruptedException {
        Account a=new Account(1000);
        Account b = new Account(1000);
        Thread t1 = new Thread(() -> {
            for (int i = 0; i < 1000; i++) {
                a.transfer(b,randomAmount());
            }
        },"t1");

        Thread t2 = new Thread(() -> {
            for (int i = 0; i < 1000; i++) {
                b.transfer(a,randomAmount());
            }
        },"t2");

        t1.start();
        t2.start();
        t1.join();
        t2.join();

        log.debug("total:{}",(a.getMoney()+b.getMoney()));


    }
    static Random random = new Random();


    //随机1-5
    public static int randomAmount() {
        return random.nextInt(100)+1;
    }




}

class Account{

    private int money;

    public Account(int money) {
        this.money = money;
    }


    public int getMoney() {
        return money;
    }

    public void setMoney(int money) {
        this.money = money;
    }


    public  void transfer(Account target,int amount){
        synchronized (Integer.class){
            if(this.money>=amount){
                this.setMoney(this.getMoney()-amount);
                target.setMoney(target.getMoney()+amount);
            }
        }

    }
}
